Fivetranのdbt Transformationを「Scheduled in Fivetran」の方法で試してみた
さがらです。
Fivetranではdbtで定義したsqlを実行できる「dbt Transformation」という機能があるのですが、Fivetran上でスケジュール実行する方法が2023年3月20日時点で「Scheduled in Fivetran」と「Scheduled in Code」の2種類あります。
今回、FivetranのUI上でスケジュール設定を行う「Scheduled in Fivetran」の方法について試してみたので、本記事でその内容をまとめてみます。
事前準備
Fivetranの設定
事前に、Googleスプレッドシートコネクタを用いて、Snowflakeへデータをロードしておきます。
dbt projectの作成
まず、dbt_project.yml
をリポジトリのルート直下に配置して作成します。dbt Cloudで開発する場合は、Gitリモートリポジトリはdbtホストでないものを使用しましょう。
続いて、上述のorders
テーブルを参照するSourceを定義します。dbt Transformationを使う上で、Sourceの定義は必須です。
models/sources.yml
version: 2 sources: - name: jaffle database: SAGARA_FIVETRAN_DEMO_DB schema: JAFFLE_SHOP_FROM_GOOGLE_SHEETS tables: - name: orders
このSourceを参照するModelを2つ定義し、MainブランチにMergeしておきます。
models/orders_by_month.sql
select date_trunc(month,order_date) as order_yearmonth, status, count(*) as order_count from {{ source('jaffle','orders') }} group by 1,2
models/orders_by_year.sql
select date_trunc(year,order_date) as order_yearmonth, status, count(*) as order_count from {{ source('jaffle','orders') }} group by 1,2
Fivetran上での設定
設定画面の起動
まず、Fivetran上でTransformations
を押し、対象のDestinationを選択します。
続いて、Connect your dbt project
を選択します。これでdbt Transformationの設定画面が立ち上がります。
Fivetranによる対象のGitリポジトリへのSSHアクセスを許可する
Fivetranが対象のdbt projectを管理するGitリポジトリへのSSHアクセスを許可させるための設定を行っていきます。
dbt Transformationの設定画面において、Public Key
をコピーします。
次に、GitHubにおいて対象のリポジトリのSeetings
からDeploy keys
を開き、Add deploy key
を押します。
Title
に任意の名称を入力した後、Key
にFivetranの画面でコピーしたPublic Keyを貼り付けて、Add key
を押します。Allow write access
はチェック不要です。
dbt Transformationの設定画面に戻って設定の続き
以下の情報を入力後、設定画面末尾のSave & Test
を押します。
Repository URL
:対象のリポジトリについてSSHアクセス用のURLを貼るDefault Schema Name
:対象のdbt projectによってオブジェクトが生成される先のスキーマ名を入力
この後、対象のリポジトリの情報の読み取りに5~10分ほど必要としますが、その後でFivetranのTransformations
の画面からdbtのModel実行のスケジュール設定ができるようになります。
Fivetran上でdbt Transformationのスケジュール設定
では、Fivetran上でdbt Transformationの設定をしていきたいと思います!
Fivetranの画面上でTransformations
を押した後に、画面右上のAdd transformations
を押し、dbt Transformation
を押します。
スケジュールの設定はModel1つごとに設定可能なので、Model
のドロップダウンのリストからスケジュール設定をしたいModelを選択します。
すると、設定画面の下部にSet Schedule
が追加で表示されます。3つ選択肢が出てきますので、お好きな方法で設定をしましょう。
一番上のFully integrated
ですが、dbtでSourceとして定義したFivetranでロードされるテーブルが、Fivetranによってロード処理が行われた直後にこのModelを実行することができます。データが更新されたらdbtで対応するModelも更新してほしいと思いますので、一番使う頻度は多い設定かなと思います!
上から二番目のPartially integrated
ですが、Fivetranのロード直後ではなく、任意の頻度でdbtのModelを実行します。もしFivetranのロードと実行タイミングが被った場合には、Fivetranのロード完了後にdbtのModelが実行されます。
上から三番目のIndependent
ですが、任意の頻度や時刻でdbtのModelを実行するということは上述のPartially integrated
と変わらないのですが、Independent
の場合はFivetranのロード処理とタイミングが被ったとしても、関係なくdbtのModelを実行します。
スケジュール方法について説明しましたが、ここでは一番目のFully integrated
で進めます。
Set schedule
の設定が終わったら、右下のSave
を押します。(Save & Run
を押すと、スケジュール設定を保存するだけでなくて対象のdbtのModelが実行されます。)
FivetranのロードからdbtのModelまで通して実行してみる
では、先程dbt Transformationの設定をFully integrated
で設定してみたので、Fivetranのロード直後にdbtのModelが実行されるかを確かめてみます!
対象のコネクタにおいて、SYNC NOW
を押し更新をしてみます。
すると、dbt TransformationにおいてもdbtのModelの実行が行われ、SUCCEEDED
となりました!
対象のModelをクリックすると、対象のModelを実行するまでのリネージと、dbtコマンドの実行履歴が確認できます。
今回はtestなしでModelだけ定義していたのですが、dbt run --models +orders_by_month
というdbtコマンドが実行されていたようです。+
がModel名の先頭に付いているため、スケジュール設定したModelの上流に位置するModelをすべて実行するようなコマンドが実行されていました。
※2023/3/24追記:dbtのtestについて
一度dbt Transformationのスケジュール設定を行った後、対象のTransformationのSchedule
タブにおいて、末尾にExecute tests after each model run
にチェックを入れて、Save
を押すと、modelの実行後に関連するtestが実行されます!
最後に
Fivetranのdbt Transformationを「Scheduled in Fivetran」の方法で試してみました。
「Scheduled in Code」の方法だとdbt上でdeployment.yml
を事前に定義しないと行けないのですが、「Scheduled in Fivetran」の方法だとFivetranの画面上の操作だけで定義出来るのは楽で良いなと感じました!